package Lintcode;

import java.util.Scanner;

/**
 * Question: https://www.lintcode.com/zh-cn/problem/a-b-problem/
 * Solution: a+b在二进制中的运算其实就是位的异或运算，不过需要对进位进行多一次异或处理。
 * 比如5+7=12，二进制表示（101）+（111），⒈ 101^111 = 010, 而最低位和最高为都为1^1，
 * 所以需要进位，⒉ 是否需要进位可以通过与运算进行判断，101 & 111 = 101, 1表示需要进位的位，
 * 发生进位时，需要向高一位加1，所以⒊将101左移一位，异或上⒈的结果（1010^010=1000, 1010 & 010 = 010），
 * 重复以上过程，直到异或不需要进位。(100^1000 = 1100=12, 100 & 1000 = 0000)
 *
 * Time: 2018/4/12
 * Coder: Ksxy
**/
public class AB {

    static Scanner scanner = null;

    static {
        scanner = new Scanner(System.in);
    }

    public static void main(String[] args) {
        int a = scanner.nextInt();
        int b = scanner.nextInt();
        System.out.println(sum(a, b));
    }

    private static int sum(int a, int b){
        int sum = 0;
        do{
            sum = a ^ b;
            int temp = (a & b) << 1;
            a = sum;
            b = temp;
        }while (b != 0);
        return sum;
    }
}
